import axios from 'axios';
import { message } from 'antd';

// 创建axios实例
const request = axios.create({
  baseURL: 'http://localhost:5000/api', // 后端接口基础地址
  timeout: 15000, // 请求超时时间
  headers: {
    'Content-Type': 'application/json'
  }
});

// 请求拦截器
request.interceptors.request.use(
  config => {
    // 从localStorage获取token
    const token = localStorage.getItem('token');
    if (token) {
      config.headers['Authorization'] = `Bearer ${token}`;
    }
    return config;
  },
  error => {
    console.error('请求错误：', error);
    return Promise.reject(error);
  }
);

// 响应拦截器
request.interceptors.response.use(
  response => {
    const res = response.data;
    // 如果后端返回的不是200，说明有错误
    if (response.status !== 200) {
      message.error(res.message || '请求错误');
      
      // 401: 未登录或token过期
      if (response.status === 401) {
        // 清除用户信息并跳转到登录页
        localStorage.removeItem('token');
        localStorage.removeItem('user');
        window.location.href = '/login';
      }
      return Promise.reject(new Error(res.message || '请求错误'));
    }
    return res;
  },
  error => {
    console.error('响应错误：', error);
    const { response } = error;
    
    if (response && response.status) {
      switch (response.status) {
        case 400:
          message.error(response.data.message || '请求错误');
          break;
        case 401:
          message.error('未授权，请登录');
          localStorage.removeItem('GS_token');
          localStorage.removeItem('GS_user');
          window.location.href = '/login';
          break;
        case 403:
          message.error('拒绝访问');
          break;
        case 404:
          message.error('请求地址不存在');
          break;
        case 500:
          message.error('服务器错误');
          break;
        default:
          message.error('网络错误');
      }
    } else {
      // 处理断网的情况
      if (!window.navigator.onLine) {
        message.error('网络已断开');
      } else {
        message.error('网络错误,请检查网络是否连接成功');
      }
    }
    return Promise.reject(error);
  }
);

export default request; 